#include <stdio.h>
#include <stdlib.h>

int main()
{

	// 运算符：
	// 1.参与操作运算数的个数
	// 2.结核性
	// 3.优先级
	// 4.运算符的特殊用法
	// 5.位运算符的意义
	/*
	5 / 2 = 2;
	5 % 2 = 1;
	5.0 / 2 = 2.5
	5.0 % 2  表达式错误，要求两边操作数必须为整型
		
	int i = 1;
	自增自减：
	i++		操作符在后，则取值在后，表达式值为1，i值为2
	++i		操作符在前，则取值在前，表达式值为2，i值为2

	*/

	// 1.算术运算符
	int i =1, j = 10, value;
	value = i++ + ++j;
	printf("i = %d\n",i);
	printf("j = %d\n",j);
	printf("value = %d\n",value);

	// 2.关系运算符
	// 比较两个数值的结果，真:1, 假:0
	printf("i > j > %d\n", i>j);
	printf("j > i > %d\n", j>i);
	int s = 0;
	printf("s > %d\n", s);
	printf("!s > %d\n", !s);	// ! 作用：真假互换

	// 3.逻辑运算符
	int a=1,b=2,c=3,d=4;
	int m=1,n=1;
	// 逻辑运算符 || 在计算左边结果为假的时候，同时还会计算右边的结果
	(m = a > b) || (n = c < d);
	printf("m = %d\nn = %d\n", m,n);
	// 逻辑运算符 && 在计算左边结果为假的时候，就不会再进行计算右边的结果，这样会造成短路现象，导致有些计算过程被忽略
	(m = a > b) && (n = c < d);
	printf("m = %d\nn = %d\n", m,n);

	// 4.赋值运算符
	int u = 6;
	u -= u *= u += 3;
	/*
	 * 计算方法：从右向左依次计算
	 * 计算过程：
	 * u += 3 --> 6 + 3 = 9
	 * u *= 9 --> 9 * 9 = 81
	 * u -= 81 --> 81 - 81 = 0;
	 * */
	printf("u = %d\n", u);

	// 5.条件运算符
	int x = a > b ? 1:0;
	printf("x = %d\n",x);

	// 6.逗号运算符
	int q,w,e;
	
	// 7.求字运算
	// sizeof 计算int double或者构建的结构占用的字节数
	printf("int 占用 %ld 个字节\n",sizeof(int));
	printf("double 占用 %ld 个字节\n",sizeof(double));

	exit(0);
}
























